To provide added functionality, computing devices have been traditionally capable of communicating with peripheral devices. Such peripheral devices include output devices, such as printers, fax machines and speakers, input devices, such as scanners, digital cameras and microphones, and extension devices, such as personal digital assistants, digital music players, hard drives, and flash-based storage drives. Peripheral devices are traditionally connected to a computing device via one or more transports, such as a wireless or wire-based transport. The communicational coupling enables the computing device to utilize some or all of the functionality of the peripheral device.
From the perspective of the computing device, each peripheral device performs one or more discrete “functions.” The computer can discover these functions through software components, such as a device driver, that are associated with a specific transport or with a specific type of peripheral device. The device driver may contain instructions to configure the function, obtain status information about the function or control operation of the function. These capabilities to interact with the peripheral device through the device driver may be exposed to a user of the computer through one or more user interfaces, such as a “control panel” or other visual interface, or through programmatic interfaces that can be utilized by higher-level software executed on the computing device by the user.
More recently, peripheral devices, often referred to as “multi-function devices”, are capable of performing multiple independent functions. For example, a device may provide printing, scanning and faxing functionality in a single physical package. Each individual function, however, remains associated with a distinct driver. Thus, when a multi-function device is connected to a computing device, the computing device recognizes the individual functions, but there is no generic mechanism by which they can be grouped into a single cohesive construct. The user, therefore, perceives a single physical peripheral device, but yet is presented with multiple independent functions on the computing device, none of which completely, or often even accurately, represent the whole multi-function peripheral device.